package com.briup.day31;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @author ThinkBook
 */
public class TestQuestion {
    /**
     * 现有一个集合定义如下：
     * List<Integer> list = new ArrayList<>();
     * 要求，往list集合中添加元素："hello"、123、3.14
     * 请编码实现。
     *
     * 原先list.add() 编译期间会检查泛型是否符合集合的要求
     * 反射调用List中的add方法
     *
     * 泛型擦除：泛型只存在于编译期间，也就是说只有在编译期才会检查我们添加的数据是否符合泛型的要求
     * List<Integer> list = new ArrayList<>();
     *
     * 在字节码中，还是以List<Object> list = new ArrayList<>();
     * 通过获取List集合对应的字节码对象，操作该对象中的add方法，从而实现
     * 往list集合中添加元素："hello"、123、3.14
     */
    public static void main(String[] args) throws Exception{
        List<Integer> list = new ArrayList<>();
        // list.add("name");
        // 获取字节码对象
        Class<? extends List> aClass = list.getClass();
        // 获取该字节码对象的add方法
        Method add = aClass.getMethod("add", Object.class);
        add.invoke(list, "hello");
        add.invoke(list, 123);
        add.invoke(list, 123.12);

        // 遍历
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}
